package job

import (
	"adam2/internal/domain"
	_interface "adam2/internal/quant/interface"
	"adam2/internal/quant/strategy"
	"anubis-framework/pkg/io"
)

// 量化
type QuantJob struct {
}

// 开始执行量化策略
func StartQuant() {
	io.Infoln("开始执行量化策略")

	/*********************************** 执行量化策略 ************************************/
	//执行最小总市值策略
	doMinTotalMarketValueStrategy()
	// 执行最小20日方差策略
	//doMinVariance20Strategy()
	// 最小21日内涨跌策略
	//doMinUpDownPercentage21Strategy()
	// 执行最小流通市值策略
	//doMinCirculationMarketValueStrategy()
	// 最小收盘价值策略
	//doMinClosePriceStrategy()
	// 最小市盈率策略
	//doMinPeStrategy()
	// 炸板策略
	//doPriceLimitBreakdownStrategy()

	/******************************* 打印最大回撤 *****************************/
	domain.BaseJob_.QuantAccountLogServiceImpl_.PrintMaximumDrawdown()

	/******************************* 将测试数据导入到历史数据表中 *****************************/
	//domain.BaseJob_.ModelServiceImpl_.ImportIntoHistoryDataTableFromQuant()

	///******************************* 打印最大回撤 *****************************/
	domain.BaseJob_.OptimizeAccountLogServiceImpl_.PrintMaximumDrawdown()

	/**************************** 将quant_*开头的表，恢复为这一天的上一天的数据 **************************/
	//domain.BaseJob_.QuantAccountServiceImpl_.RestoreQuant(properties.QuantProperties_.RestoreDate)

	/**************************** 将optimize_*开头的表，恢复为这一天的上一天的数据 **************************/
	//domain.BaseJob_.OptimizeAccountServiceImpl_.RestoreOptimize(properties.QuantProperties_.RestoreDate)

	/************************************ 使操作系统睡眠 **********************************/
	//domain.BaseJob_.ProjectServiceImpl_.MakeOperationSystemSleep()

	io.Infoln("量化策略执行完成")
}

// 最小总市值策略
func doMinTotalMarketValueStrategy() {
	// 配置策略、初始化、执行
	var minTotalMarketValueStrategy _interface.Strategy = &strategy.MinTotalMarketValueStrategy{}
	minTotalMarketValueStrategy.ConfigStrategy()
	minTotalMarketValueStrategy.Start()
}

// 最小20日方差策略
func doMinVariance20Strategy() {
	// 配置策略、初始化、执行
	var minVariance20Strategy _interface.Strategy = &strategy.MinVariance20Strategy{}
	minVariance20Strategy.ConfigStrategy()
	minVariance20Strategy.Start()
}

// 最小21日内涨跌策略
func doMinUpDownPercentage21Strategy() {
	// 配置策略、初始化、执行
	var minUpDownPercentage21Strategy _interface.Strategy = &strategy.MinUpDownPercentage21Strategy{}
	minUpDownPercentage21Strategy.ConfigStrategy()
	minUpDownPercentage21Strategy.Start()
}

// 最小流通市值策略
func doMinCirculationMarketValueStrategy() {
	// 配置策略、初始化、执行
	var minCirculationMarketValueStrategy _interface.Strategy = &strategy.MinCirculationMarketValueStrategy{}
	minCirculationMarketValueStrategy.ConfigStrategy()
	minCirculationMarketValueStrategy.Start()
}

// 最小收盘价策略
func doMinClosePriceStrategy() {
	// 配置策略、初始化、执行
	var minClosePriceStrategy _interface.Strategy = &strategy.MinClosePriceStrategy{}
	minClosePriceStrategy.ConfigStrategy()
	minClosePriceStrategy.Start()
}

// 最小市盈率策略
func doMinPeStrategy() {
	// 配置策略、初始化、执行
	var minPeStrategy _interface.Strategy = &strategy.MinPeStrategy{}
	minPeStrategy.ConfigStrategy()
	minPeStrategy.Start()
}

// 炸板策略
func doPriceLimitBreakdownStrategy() {
	// 配置策略、初始化、执行
	var priceLimitBreakdownStrategy _interface.Strategy = &strategy.PriceLimitBreakdownStrategy{}
	priceLimitBreakdownStrategy.ConfigStrategy()
	priceLimitBreakdownStrategy.Start()
}
